['1', '2', '3'].reduce<readonly string[]>((arr, text) => {
  const newArr = [...arr];
  newArr.push(text);
  return newArr;
}, []);

[1, 2, 3].reduce<number[]>((arr, num) => arr.concat(num * 2), []);

['a', 'b'].reduce<Record<string, boolean>>(
  (accum, name) => ({
    ...accum,
    [name]: true,
  }),
  {},
);

new (class Mine {
  reduce() {}
})().reduce(() => {}, 1 as any);

class Mine {
  reduce() {}
}
new Mine().reduce(() => {}, 1 as any);

import { Reducable } from './class';
new Reducable().reduce(() => {}, 1 as any);

[1, 2, 3]['reduce']((sum, num) => sum + num, 0);
[1, 2, 3][null]((sum, num) => sum + num, 0);
[1, 2, 3]?.[null]((sum, num) => sum + num, 0);
[1, 2, 3].reduce((sum, num) => sum + num, 0);
[1, 2, 3].reduce<number[]>((a, s) => a.concat(s * 2), []);
[1, 2, 3]?.reduce<number[]>((a, s) => a.concat(s * 2), []);